/**
 * CCLIOT库回调函数原型汇总
 * 文件名称：	IOTCallback.java
 * 文件版本：	V3
 * 修改日期：	2016-12-6
 */
package com.ccl.iot;

import com.ccl.iot.object.IOTDeviceIP;
import com.ccl.iot.object.IOTDeviceMAC;

public interface IOTCallback {
	public interface ErrorCallback extends IOTCallback{
		public void onError(String aAction, int aErrorCode);
	}
	
	public interface LoginResultCallback extends IOTCallback{
		/**
		 * 登录结果回调函数原型。
		 * @param aResult	-	0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
		 */
		public void onLoginResultCallback(int aResult);
	}
	
	public interface NotifyCallback extends IOTCallback{
		/**
		 * 系统通知回调函数原型。
		 * @param aNotifyType	-	智能类型，详见：ENOTIFY_TYPE
		 * @param aRelativeUser	-	通知相关的用户ID，具体内容见ENOTIFY_TYPE中对应的描述
		 * @param aRelativeDevice	-	通知相关的设备ID，具体内容见ENOTIFY_TYPE中对应的描述
		 * @param aCreateTime	-	通知创建的时间，以秒为最小单位计数，可通过IOTSplitTime解释其所对应的具体时间值
		 * @param aContentSize	-	通知的内容大小
		 * @param aContent	-	通知的内容，以UTF-8格式显示的字符串，具体内容见ENOTIFY_TYPE中对应的描述
		 */
		public void onNotifyCallback(int aNotifyType, long aRelativeUser,long aRelativeDevice, long aCreateTime, int aContentSize, byte[] aContent);
	}

	public interface AddressInfoCallback extends IOTCallback{
		/**
		 * 地址信息回调函数原型。
		 * @param aDevID	-	返回地址信息的设备
		 * @param aMAC	-	返回地址信息的设备。数据结构见：{@link IOTDeviceMAC}
		 * @param aIPType	-	IP地址类型。详见：EIP_TYPE
		 * @param aIP1-aIP4	-	IP地址。不同类型的地址内容表达如下：
		 *										EIP_TYPE_V4：aIP1.aIP2.aIP3.aIP4
		 *										EIP_TYPE_V6：aIP1(低16位):aIP1(高16位):aIP2(低16位):aIP2(高16位):aIP3(低16位):aIP3(高16位):aIP4(低16位):aIP4(高16位)
		 */
		public void onAddressInfoCallback(long aDevID, long aMAC, int aIPType, int aIP1, int aIP2, int aIP3, int aIP4);
	}
	
	public interface BeaconCallback extends IOTCallback{
		/**
		 * 信标数据回调函数原型。
		 * @param aIndex	-	信标索引号，调用IOTStartBeacon返回的值
		 * @param aDevID	-	返回信标数据的设备
		 * @param aDistance	-	返回信标数据的设备与启动信标设定的设备之间的距离，典型值为0~100，值越大距离越大
		 */
		public void onBeaconCallback(int aIndex, long aDevID, short aDistance);
	}
	
	public interface DeviceInfoCallback extends IOTCallback{
		/**
		 * 设备信息回调函数原型。
		 * @param aDevID	-	设备信息所对应的设备ID
		 * @param aType	-	设备的类型，详见：EDEVICE_TYPE
		 * @param aModel	-	设备的型号
		 * @param aVersion	-	设备的固件版本
		 * @param aRegisterSpace	-	设备的寄存器大小
		 * @param aDeviceIP	-	设备的IP地址，数据结构见：{@link IOTDeviceIP}
		 */
		public void onDeviceInfoCallback(long aDevID, short aType, short aModel, int aVersion, int aRegisterSpace, int aDeviceIP);
	}
	
	public interface AuthStateCallback extends IOTCallback{
		/**
		 * 设备信息回调函数原型。
		 * @param aNetWork	-	数据来源网络类型，详见：EIOTNETWORK_TYPE
		 * @param aDevID	-	设备的ID
		 * @param aAuthState	-	设备开放给当前登录用户的权限，详见：EAUTH_STATE
		 */
		public void onAuthStateCallback(int aNetWork, long aDevID, int aNewAuth);
	}
	
	public interface RegDataCallback extends IOTCallback{
		/**
		 * 设备寄存器数据改变回调函数原型。
		 * @param aNetWork	-	数据来源网络类型，详见：EIOTNETWORK_TYPE
		 * @param aDevID	-	改变寄存器数据的设备ID
		 * @param aAddress	-	改变的寄存器起始地址
		 * @param aSize	-	改变的的寄存器数据长度
		 * @param aData	-	改变后的寄存器数据，数据长度为aSize
		 * @param aTime	-	寄存器数据改变的时间，以秒为最小单位计数，可通过IOTSplitTime解释其所对应的具体时间值
		 */
		public void onRegDataCallback(int aNetWork, long aDevID, short aAddress, short aSize, byte[] aData, long aTime);
	}
	
	public interface UpgradeDeviceInfoCallback extends IOTCallback{
		/**
		 * 授受升级的设备信息回调函数原型。
		 * @param aDevID	-	接受升级的设备ID
		 * @param aDeviceIP	-	接受升级的设备IP地址,用于IOTUpgradeOne函数，数据结构见：{@link IOTDeviceIP}
		 * @param aDevicePort	-	接受升级的设备升级端口,用于IOTUpgradeOne函数
		 */
		public void onUpgradeDeviceInfoCallback(long aDevID, int aDevIP, short aDevicePort);
	}

	public interface UpgradeProgressCallback extends IOTCallback{
		/**
		 * 设备升级进度回调函数原型。
		 * @param aDevID	-	升级中的设备ID
		 * @param aTotal	-	升级包大小
		 * @param aProgress	-	设备已接受的升级数据大小
		 */
		public void onUpgradeProgressCallback(long aDevID, int aTotal, int aProgress);
	}
}
